package com.mall.exception;

import com.mall.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.ArrayList;
import java.util.List;

@RestControllerAdvice
@Slf4j
public class GlobalException {
//    自定义异常
    @ExceptionHandler(MallException.class)
    public Result mallException(MallException mallException){
        log.error("业务异常："+mallException.getMsg());
        return Result.error(mallException.getStatus(),mallException.getMsg());
    }
//    请求参数异常
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public  Object methodArgumentNotValidException(MethodArgumentNotValidException methodArgumentNotValidException){
//        将所有错误信息添加到list中
        List<String> list= new ArrayList<String>();
        List<ObjectError> allErrors = methodArgumentNotValidException.getAllErrors();
        for (ObjectError objectError:allErrors){
            list.add(objectError.getDefaultMessage());
        }
        //2.返回json错误数据类型
        if(list.size()==0){
            //参数信息没有错误的时候
            return Result.error(MallExceptionEnum.PARAM_ERROR);
        }else{
            return Result.error(MallExceptionEnum.PARAM_ERROR.getStatus(),list.toString());
        }
    }
//    系统异常
    @ExceptionHandler(Exception.class)
    public Result exception(Exception e){
        return Result.error(MallExceptionEnum.SYSTEM_ERROR);
    }
}